﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using BussinessLogicTecnoPez;
using BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques;
using BussinessLogicTecnoPez.Produccion.Clasificacion_e_Incubacion;
using Tecnopez.Globals;
using Microsoft.Practices.EnterpriseLibrary.Validation;

public partial class Modules_EnfermedadesControlEstanque_ParametrosControlEspecie : System.Web.UI.Page
{

    const String especieViewStateOrdenKey="ordenEspecie";
    const String especieViewStateOrdenDireccionKey = "ordenDireccionEspecie";
    const String parametroViewStateOrdenKey = "ordenParametro";
    const String parametroViewStateOrdenDireccionKey = "ordenDireccionParametro";

    const String viewStateEspecieKey = "viewStateSpecieKey";

    protected void Page_Load(object sender, EventArgs e)
    {

        if (IsPostBack == false)
        {
            SetMode(PageMode.ListMode);
        }

        TPPParametroControl.ObjType = typeof(ParametroControl);

        InicializarValidadores();
        InicializarGrilla();

//        cmdEliminar.Attributes.Add("onClick", "return confirm('Esta seguro de eliminar el registro?');");

        GenericMasterPage master = (GenericMasterPage)this.Master;
        master.Imagen = "../Styles/Icons/ic_soporte.gif";
        master.Titulo = "Parámetros de control de las especies";
        //cargarGrillaEspecies();
        _lblError.Text = "";
        cargarGrillaParametros();
    }

    private void InicializarValidadores()
    {
        PPVParametro.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Clasificacion_e_Incubacion.ItemDetalleEspecieParametroControl";
        PPVParametro.ControlToValidate = "txtIDEspecie";
        PPVParametro.PropertyName = "ParametroControl";
        //PPVParametro.Display = ValidationSummaryDisplayMode.List;
    }

    private void cargarGrillaEspecies()
    {
        Especie.getManager.ClearFilters();
        Especie.getManager.ClearOrders();

        Especie.getManager.AddFilter("NOMBRE", GenericManager<Especie>.filterOperator.Like, "%" + txtBuscarNombre.Text.Trim() + "%");

        if (TgrdEspecie.getPageDataViewOrderKeyValue(ViewState)==null)
        {
            Especie.getManager.AddOrder("IDESPECIE", GenericManager<Especie>.Order.orderDirection.DESC);
        }
        else
        {
            Especie.getManager.AddOrder(TgrdEspecie.getPageDataViewOrderKeyValue(ViewState), TgrdEspecie.getPageDataViewOrdenDireccionKeyValue<Especie>(ViewState));
        }

        List<Especie> lista = new List<Especie>();
        lista = Especie.getManager.GetFilter();
        if (lista != null)
        {
            TgrdEspecie.DataSource = lista;
            TgrdEspecie.DataBind();
        }
    }

    private void cargarGrillaParametros()
    {
        DetalleParametroControlEspecie lista= (DetalleParametroControlEspecie) Session["detalleLista"];

        if (lista != null)
        {
            TDGParametros.DataSource = lista.ItemList;
            TDGParametros.DataBind();
        }
        else
        {
            TDGParametros.DataSource = null;
            TDGParametros.DataBind();
        }
    }

    private void seleccionarParametroControl(int o)
    {
        //cargarGrilla();
        //int IdParametroControl = int.Parse(grdParamtrosControl.DataKeys[o].Value.ToString());
        //ParametroControl.getManager.ClearFilters();
        //ParametroControl.getManager.AddFilter("IdParametroControl", BussinessLogicTecnoPez.GenericManager<ParametroControl>.filterOperator.Equals, IdParametroControl);
        //ParametroControl auxParametroControl = ParametroControl.getManager.GetOne();
        //txtID.Text = auxParametroControl.IdParametroControl.ToString();
        //txtDescripcion.Text = auxParametroControl.Descripcion.Trim();
        //txtFrecuencia.Text = auxParametroControl.Frecuencia.ToString();
        //TPPUnidadMedida.ItemSelected = auxParametroControl.UnidadMedida;
        //SetMode(PageMode.ViewMode);
    }

    private void seleccionarEspecie(int o)
    {
        //cargarGrillaEspecies();
        int IdEspecie = int.Parse(TgrdEspecie.DataKeys[o].Value.ToString());
        Especie.getManager.ClearFilters();
        Especie.getManager.AddFilter("IdEspecie", BussinessLogicTecnoPez.GenericManager<Especie>.filterOperator.Equals, IdEspecie);
        Especie auxEspecie = Especie.getManager.GetOne();
        txtIDEspecie.Text = auxEspecie.idespecie.ToString();
        txtNombreEspecie.Text = auxEspecie.nombre.Trim();
        ViewState[viewStateEspecieKey] = auxEspecie.idespecie;
        Session["detalleLista"] = auxEspecie.DetalleParametroControl;
        cargarGrillaParametros();
        SetMode(PageMode.ViewMode);
    }

    private void SetMode(PageMode mode)
    {
        ViewState["PageMode"] = mode;
        switch (mode)
        {
            case PageMode.ListMode:
                TDGParametros.Enabled = false;
                cmdBuscar.Enabled = true;
                wzrABM.ActiveStepIndex = 0;
                break;
            case PageMode.NewMode:
                TDGParametros.Enabled = true;
                txtIDEspecie.ReadOnly = true;
                txtNombreEspecie.ReadOnly = true;
                TPPParametroControl.Enable = true;
                txtValorMaximo.ReadOnly = false;
                txtValorMinimo.ReadOnly = false;
                txtValorOptimo.ReadOnly = false;
                cmdAgregar.Enabled = true;
                cmdModificar.Enabled = false;
                cmdCancelar.Enabled = true;
                cmdAceptar.Enabled = true;
                TDGParametros.Columns[TDGParametros.Columns.Count - 1].Visible = true;
                wzrABM.ActiveStepIndex = 1;
                break;
            case PageMode.EditMode:
                TDGParametros.Enabled = true;
                txtIDEspecie.ReadOnly = true;
                txtNombreEspecie.ReadOnly = true;
                TPPParametroControl.Enable = true;
                txtValorMaximo.ReadOnly = false;
                txtValorMinimo.ReadOnly = false;
                txtValorOptimo.ReadOnly = false;
                cmdAgregar.Enabled = true;
                cmdModificar.Enabled = false;
                cmdCancelar.Enabled = true;
                cmdAceptar.Enabled = true;
                TDGParametros.Columns[TDGParametros.Columns.Count - 1].Visible = true;
                wzrABM.ActiveStepIndex = 1;
                break;
            case PageMode.ViewMode:
                TDGParametros.Enabled = false;
                txtIDEspecie.ReadOnly = true;
                txtNombreEspecie.ReadOnly = true;
                TPPParametroControl.Enable = false;
                txtValorMaximo.ReadOnly = true;
                txtValorMinimo.ReadOnly = true;
                txtValorOptimo.ReadOnly = true;
                cmdAgregar.Enabled = false;
                cmdModificar.Enabled = true;
                cmdCancelar.Enabled = true;
                cmdAceptar.Enabled = false;
                TDGParametros.Columns[TDGParametros.Columns.Count - 1].Visible = false;
                wzrABM.ActiveStepIndex = 1;
                break;
        }

    }

    protected void cmdEditar_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.EditMode);
        cargarGrillaParametros();
    }

    protected void cmdEliminar_Click(object sender, EventArgs e)
    {
        //ParametroControl auxParametroControl = new ParametroControl();
        //auxParametroControl.IdParametroControl = int.Parse(txtID.Text.Trim());
        //int res = ParametroControl.getManager.Delete(auxParametroControl);
        //cargarGrilla();
        //SetMode(PageMode.ListMode);
    }

    protected void cmdNuevo_Click(object sender, EventArgs e)
    {
        //txtID.Text = "";
        //txtDescripcion.Text = "";
        //txtFrecuencia.Text = "";
        //TPPUnidadMedida.ItemSelected = null;
        //SetMode(PageMode.NewMode);
    }

    protected void cmdAceptar_Click(object sender, EventArgs e)
    {
        int idEspecie = Convert.ToInt32(ViewState[viewStateEspecieKey].ToString());
        Especie.getManager.ClearOrders();
        Especie.getManager.ClearFilters();
        Especie.getManager.AddFilter("IDESPECIE", GenericManager<Especie>.filterOperator.Equals, idEspecie);
        Especie auxEspecie = Especie.getManager.GetOne();

        auxEspecie.DetalleParametroControl = (DetalleParametroControlEspecie)Session["detalleLista"];

        Especie.getManager.Update(auxEspecie);

        SetMode(PageMode.ListMode);
    }

    protected void cmdCancelar_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.ListMode);
    }

    private void InicializarGrilla()
    {
        DataControlField[] extraButtons = new DataControlField[1];
        ButtonField colB = new ButtonField();
        colB.ButtonType = ButtonType.Image;
        colB.ImageUrl = Functions.getHost(this.Page) + "Styles/Icons/lupa.png";
        colB.HeaderText = "";
        colB.CommandName = "Selleccionar";
        colB.HeaderStyle.Width = 5;
        colB.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
        extraButtons[0] = colB;

        TgrdEspecie.setupGrid(typeof(Especie),cargarGrillaEspecies, true, true,this.ViewState,extraButtons);

        extraButtons = new DataControlField[1];
        colB = new ButtonField();
        colB.ButtonType = ButtonType.Image;
        colB.ImageUrl = Functions.getHost(this.Page) + "Styles/Icons/eliminar.gif";
        colB.HeaderText = "Quitar";
        colB.CommandName = "Quitar";
        colB.HeaderStyle.Width = 5;
        colB.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
        extraButtons[0] = colB;

        TDGParametros.setupGrid(typeof(ItemDetalleEspecieParametroControl), cargarGrillaParametros, false, false, this.ViewState,extraButtons);
        
    }

    private bool validar(ItemDetalleEspecieParametroControl objeto)
    {
        ValidationResults v = Validation.Validate<ItemDetalleEspecieParametroControl>(objeto);
        if (!v.IsValid)
        {
            _lblError.Text = "Error en el formulario: Por favor verifique los campos ingresados.";
        }
        return v.IsValid;
    }

    private PageMode getMode()
    {
        if (ViewState["PageMode"] == null)
            return PageMode.ModeNotFound;
        return (PageMode)ViewState["PageMode"];
    }

    protected void PPVParametro_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
    {
        if (TPPParametroControl.ItemSelected == null)
        {
            e.ConvertedValue = null;
        }
        else
        {
            e.ConvertedValue = TPPParametroControl.ItemSelected.ToString();
        }
    }


    protected void cmdAgregar_Click(object sender, EventArgs e)
    {
        ItemDetalleEspecieParametroControl item = new ItemDetalleEspecieParametroControl();
        try
        {
            item.ParametroControl = (ParametroControl)TPPParametroControl.ItemSelected;
            item.ValorMaximo = Convert.ToDecimal(txtValorMaximo.Text);
            item.ValorMinimo = Convert.ToDecimal(txtValorMinimo.Text);
            item.ValorOptimo = Convert.ToDecimal(txtValorOptimo.Text);

            if (validar(item))
            {
                DetalleParametroControlEspecie lista = (DetalleParametroControlEspecie) Session["detalleLista"];
                lista.add(item);
                Session["detalleLista"] = lista;
            }
            cargarGrillaParametros();
        }
        catch (BussinessLogicTecnoPezException exc)
        {
            _lblError.Text = exc.Message;
            Functions.LogError(exc);
            SetMode(PageMode.NewMode);
        }
        catch (FormatException exc)
        {
            _lblError.Text = exc.Message;
            Functions.LogError(exc);
            SetMode(PageMode.NewMode);
        }
        catch (Exception exc)
        {
            _lblError.Text = "error: No se pudo realizar la operación";
            Functions.LogError(exc);
            SetMode(PageMode.NewMode);
        }
    }
    protected void TDGParametros_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        //int IndiceVer = 0;
        //for (int celda = 0; celda < TDGParametros.Columns.Count; celda++)
        //{
        //    if (TDGParametros.Columns[celda].HeaderText == "Edición")
        //    {
        //        IndiceVer = celda;
        //    }
        //}

        //if (e.Row.DataItem != null)
        //{
        //    ImageButton imgVer = (ImageButton)e.Row.Cells[IndiceVer].Controls[0];
        //    imgVer.Width = 20;
        //    imgVer.ID = "imagen" + e.Row.RowIndex;
        //}
    }
    protected void TDGParametros_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        switch (e.CommandName)
        {
            case "Quitar":
                //DetalleParametroControlEspecie lista = (DetalleParametroControlEspecie)Session["detalleLista"];

                //List<ItemDetalleEspecieParametroControl> paraBorra = new List<ItemDetalleEspecieParametroControl>();
                //foreach (ItemDetalleEspecieParametroControl item in lista)
                //{
                //    if(item.ParametroControl.Descripcion == TDGParametros.Rows[int.Parse(e.CommandArgument.ToString())].Cells[0].Text)
                //    {
                //        paraBorra.Add(item);
                        
                //    }
                //}
                //lista.ItemList.Remove(paraBorra[0]);
                //Session["detalleLista"] = lista;
                //cargarGrillaParametros();
                //break;
                try
                {
                    DetalleParametroControlEspecie lista = (DetalleParametroControlEspecie)Session["detalleLista"];
                    cargarGrillaParametros();
                    Int32 indice = Convert.ToInt32(e.CommandArgument);
                    indice = TDGParametros.Rows[indice].DataItemIndex;
                    lista.ItemList.RemoveAt(indice);
                    Session["detalleLista"] = lista;
                    cargarGrillaParametros();
                }
                catch
                { }
                break;
        }

    }
    protected void TgrdEspecie_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        int IdEspecie = int.Parse(TgrdEspecie.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString());
        Especie.getManager.ClearFilters();
        Especie.getManager.AddFilter("IdEspecie", BussinessLogicTecnoPez.GenericManager<Especie>.filterOperator.Equals, IdEspecie);
        Especie auxEspecie = Especie.getManager.GetOne();
        txtIDEspecie.Text = auxEspecie.idespecie.ToString();
        txtNombreEspecie.Text = auxEspecie.nombre.Trim();
        ViewState[viewStateEspecieKey] = auxEspecie.idespecie;
        Session["detalleLista"] = auxEspecie.DetalleParametroControl;
        cargarGrillaParametros();
        SetMode(PageMode.ViewMode);

    }
}
